package plataforma.base.cdp;

import java.util.List;

public class Criterio {
	
	public enum Tipo {
		LIKE, DATA_UNICA, DATA_ENTRE, OBJETO,LISTA,OBJETO_MENOR,OBJETO_MAIOR_IGUAL,OBJETO_MENOR_IGUAL, OBJETO_NULL
	}
	
	
	public Criterio(String parNomePropriedade,Tipo tipo,Object parValor){
		setNomePropriedade(parNomePropriedade);
		setTipo(tipo);
		setValor(parValor);
		
		
	}
	
	
	public Criterio(String parNomePropriedade,Tipo tipo,Object parValor,Object parValor2){
		setNomePropriedade(parNomePropriedade);
		setTipo(tipo);
		setValor(parValor);
		setValor2(parValor2);
		
		
	}
	
	public Criterio(String parNomePropriedade,List<Object> valores,Tipo tipo){
		setNomePropriedade(parNomePropriedade);
		setTipo(tipo);
		
		listaValores=valores;
		
		
	}
	
	private String nomePropriedade;
	
	public String getNomePropriedade() {
		return nomePropriedade;
	}

	public void setNomePropriedade(String nomePropriedade) {
		this.nomePropriedade = nomePropriedade;
	}


	private Tipo tipo;
	
	private Object valor;

	private Object valor2;
	
	private List<Object> listaValores;
	
	public Tipo getTipo() {
		return tipo;
	}

	public void setTipo(Tipo tipo) {
		this.tipo = tipo;
	}

	public Object getValor() {
		return valor;
	}

	public void setValor(Object valor) {
		this.valor = valor;
	}

	public Object getValor2() {
		return valor2;
	}

	public void setValor2(Object valor2) {
		this.valor2 = valor2;
	}
	
	
	public String toHQL(){
		StringBuilder sb = new StringBuilder();
		
		
	
		
		switch (tipo) {
		case LIKE:
			sb.append("upper("+nomePropriedade+")");
			sb.append(" like upper('%" +valor+"%')");
			break;
			
		case OBJETO:
			sb.append(nomePropriedade);
			sb.append(" = '"+valor+"' ");
			break;
			
			
		case LISTA:
			sb.append(nomePropriedade);
			sb.append(" in (");
			
			for (int i=0; i< listaValores.size();i++) {
				
				if(i != 0 )
					sb.append(",");	
				
				sb.append("'"+listaValores.get(i)+"'");								
			}
			
			sb.append(") ");
			break;
			
		case OBJETO_MENOR:
			sb.append(nomePropriedade);
			sb.append(" < '"+valor+"'");
			break;
			
		case OBJETO_MENOR_IGUAL:
			sb.append(nomePropriedade);
			sb.append(" <=  '"+valor+"' ");
			break;
			
		case OBJETO_MAIOR_IGUAL:
			sb.append(nomePropriedade);
			sb.append(" >= '"+valor+"' ");
			break;
			
		case DATA_ENTRE:
			sb.append(nomePropriedade);
			sb.append("  between  '"+valor+ "' and '"+valor2+"' ");
			break;	
		case OBJETO_NULL:
			sb.append(nomePropriedade);
			sb.append("  is null ");
			break;		
			
			
			
			

		default:
			break;
		}
		
		
		return sb.toString();
	}

	

}
